package com.yjlove.myplay;

import android.app.Application;
import android.content.Context;
import android.util.Log;

import com.hyphenate.chat.EMClient;
import com.hyphenate.chat.EMOptions;
import com.nostra13.universalimageloader.cache.memory.impl.UsingFreqLimitedMemoryCache;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.download.BaseImageDownloader;
import com.squareup.leakcanary.LeakCanary;
import com.tencent.smtt.sdk.QbSdk;
import com.umeng.message.IUmengRegisterCallback;
import com.umeng.message.PushAgent;


/**
 * 作者 YJlvoe
 * 创建时间 2016/11/30.
 */
public class AppContext extends Application {

    private static Context mContext;
    private static final String TAG = "AppContext";

    public static Context getInstance() {
        return mContext;
    }
    @Override
    public void onCreate() {
        super.onCreate();
        // 检测内存泄漏
        LeakCanary.install(this);

        mContext = getApplicationContext();

        initX5Core();
        initPush();
        initImageLoader(getApplicationContext());

        //initEase(getApplicationContext());
        //CrashHandler.getInstance().init(getApplicationContext());
        //initUmengStatistics(getApplicationContext());
    }

    private void initPush() {
        /*----------------------友盟推送代码段-------------开始-------------*/
        PushAgent mPushAgent = PushAgent.getInstance(this);
        //注册推送服务，每次调用register方法都会回调该接口
        mPushAgent.register(new IUmengRegisterCallback() {

            @Override
            public void onSuccess(String deviceToken) {
                //注册成功会返回device token
                Log.i("AppContext", "Success:" + deviceToken);
            }

            @Override
            public void onFailure(String s, String s1) {
                Log.i("AppContext", "Failure:" + s);
            }
        });
        /*----------------------友盟推送代码段-------------结束-------------*/
    }

    private void initImageLoader(Context context) {
        //缓存文件的目录
        //File cacheDir = StorageUtils.getOwnCacheDirectory(context, "imageloader/Cache");
        ImageLoaderConfiguration config = new ImageLoaderConfiguration
                .Builder(context)
                .memoryCacheExtraOptions(480, 800) // max width, max height，即保存的每个缓存文件的最大长宽
                //.discCacheExtraOptions(480, 800, Bitmap.CompressFormat.JPEG, 75, null) // Can slow ImageLoader, use it carefully (Better don't use it)/设置缓存的详细信息，最好不要设置这个
                .threadPoolSize(3)//线程池内加载的数量
                .threadPriority(Thread.NORM_PRIORITY - 2)
                .denyCacheImageMultipleSizesInMemory()
                .memoryCache(new UsingFreqLimitedMemoryCache(2 * 1024 * 1024)) // You can pass your own memory cache implementation/你可以通过自己的内存缓存实现
                .memoryCacheSize(2 * 1024 * 1024)
                //.discCacheSize(50 * 1024 * 1024)
                //.discCacheFileNameGenerator(new Md5FileNameGenerator())//将保存的时候的URI名称用MD5 加密
                //.tasksProcessingOrder(QueueProcessingType.LIFO)
                //.discCacheFileCount(100) //缓存的文件数量
                //.discCache(new UnlimitedDiscCache(cacheDir))//自定义缓存路径
                .defaultDisplayImageOptions(DisplayImageOptions.createSimple())

                .imageDownloader(new BaseImageDownloader(context, 5 * 1000, 30 * 1000)) // connectTimeout (5 s), readTimeout (30 s)超时时间
                .writeDebugLogs() // Remove for release app
                .build();//开始构建

        //全局初始化此配置
        ImageLoader.getInstance().init(config);
    }

    // 初始化友盟统计
//    private void initUmengStatistics(Context context) {
//        MobclickAgent.setDebugMode(false);//开启/关闭调试模式（true，如果不开启debug运行不会上传umeng统计）
//        MobclickAgent.setCheckDevice(false);//不采集手机mac地址
//        MobclickAgent.openActivityDurationTrack(false);//// 禁止默认的页面统计方式，这样将不会再自动统计Activity。
//        MobclickAgent.setScenarioType(context, MobclickAgent.EScenarioType.E_UM_NORMAL);//设置场景模式为普通
//    }

    // 初始化环信
    private void initEase(Context context) {
        EMOptions options = new EMOptions();
        // 默认添加好友时，是不需要验证的，改成需要验证
        options.setAcceptInvitationAlways(false);
        //初始化
        EMClient.getInstance().init(context, options);
        //在做打包混淆时，关闭debug模式，避免消耗不必要的资源
        EMClient.getInstance().setDebugMode(true);
    }


    private void initX5Core() {
        //搜集本地tbs内核信息并上报服务器，服务器返回结果决定使用哪个内核。
        QbSdk.PreInitCallback cb = new QbSdk.PreInitCallback() {
            @Override
            public void onCoreInitFinished() {
                Log.d(TAG, "onCoreInitFinished");

            }
            @Override
            public void onViewInitFinished(boolean b) {
                //x5內核初始化完成的回调，为true表示x5内核加载成功，否则表示x5内核加载失败，会自动切换到系统内核。
                Log.d(TAG, " onViewInitFinished is " + b);
            }
        };
        //x5内核初始化接口
        QbSdk.initX5Environment(getApplicationContext(), cb);
    }
}
